package com.algorithm.ch1.cjm.string;

/**
 * 给定两个字符串 s 和 t ，编写一个函数来判断 t 是否是 s 的一个字母异位词。
 * <p>
 * 示例 1:
 * <p>
 * 输入: s = "anagram", t = "nagaram"
 * 输出: true
 * 示例 2:
 * <p>
 * 输入: s = "rat", t = "car"
 * 输出: false
 * 说明:
 * 你可以假设字符串只包含小写字母。
 * <p>
 * 进阶:
 * 如果输入字符串包含 unicode 字符怎么办？你能否调整你的解法来应对这种情况？
 */
public class IsAnagram {


    public static void main(String[] args) {

        String s = "anagram";
        String t = "nagaram";
        boolean anagram = new IsAnagram().isAnagram1(s, t);

        System.out.println(anagram);
    }

    public boolean isAnagram(String s, String t) {

        char[] chars = s.toCharArray();
        char[] chars1 = t.toCharArray();

        for(char c = 'a'; c < 'z'; c++){

            int n1 = 0;
            int n2 = 0;
            for (char c1 : chars){

                if(c == c1){
                    n1 ++;
                }
            }

            for (char c2 : chars1){

                if(c == c2){
                    n2 ++;
                }
            }

            if(n1 != n2){
                return false;
            }
        }

        return true;
    }

    /**
     * char类型
     * a,b,c,d,e,f,g,...x,y,z
     *97,98,...122
     *
     * @param s
     * @param t
     * @return
     */
    public boolean isAnagram1(String s, String t) {

        if (s.length() != t.length()) {
            return false;
        }
        int[] c = new int[26];
        int[] d = new int[26];
        char[] sc = s.toCharArray();
        char[] tc = t.toCharArray();
        for (int i = 0; i < sc.length; i++) {
            c[sc[i] - 97]++;
            d[tc[i] - 97]++;
        }
        for (int j = 0; j < c.length; j++) {
            if (c[j] != d[j]) {
                return false;
            }
        }
        return true;

    }


}
